package com.student.servlet;


        import com.student.dao.UserDao;
        import com.student.model.User;

        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;


public class UserServlet extends HttpServlet {
    /**
     * doGet(request, response) : 此方法用于处理提交的请求方式为：GET 请求.
     * <form method="get">, <a href="url">, javascript: location.href="url", jQuery: $.get(url,function)
     *
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    /**
     * doPost(request, response) : 此方法用于处理提交的请求方式为：POST 请求. <form method="post">, jQuery: $.post(url,function)
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 1. 从请求中获取表单数据, 在JSP环境中有一个表示请求的隐式对象request（即服务器已创建好的对象，我们直接拿来用就行）
        String username = request.getParameter("username");
        String password = request.getParameter("password");


        // JSP中表示输出数据的隐式对象：out，我们可通过此对象向客户端浏览器写入HTML

        User logUser = new UserDao().login(username, password);
        // 1. 登录成功, 进入到系统的主页面
        if (logUser != null) {
            // 在JSP环境中session是一个隐式对象。与request、response这些隐式对象相似的。
            request.getSession().setAttribute("logUser", logUser);

        /*
            在JSP中页面跳转（页面导航）有以下两种方式：
            1. 请求转发: request.getRequestDispatcher(String uri).forward(request, response);
            2. 重定向: response响应是JSP中的又一个隐式对象. response.sendRedirect(String uri);
                request.getContextPath()得到应用程序的上下文，即8080端口后的部分

            请求转发和重定向的区别：
            1. 请求转发是在tomcat服务器内部，将request和response对象转发到另一个web组件（JSP/Servlet）上去断续处理,其特点
              是存储在request中的数据转发至别web组件（JSP/Servlet）后数据仍然存在。
              A.jsp(存数据) ---forward--> B.jsp
            2. 在重定向方式中，在一个web组件（JSP/Servlet）上存储的数据，重定向到另一个web组件（JSP/Servlet）后数据将丢失不可用。
            3.
        */
            // http://localhost:8080/firstweb/main.jsp
            response.sendRedirect(request.getContextPath() + "/main.jsp"); // 此处中的“/” 就是web目录的位置

        } else {
            // 2. 登录失败，返回到登录的页面重新登录
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        }

    }
}
